/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：呼叫中心-系统业务常量管理层
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taiping.cc.application.constant.service;

import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 微服务工程-工作台-服务列表
 */
public enum PlatformServiceEnum {
    START_ACTION("work-platform", "startAction", "工作台-开始回访"),
    END_ACTION("work-platform", "endAction", "工作台-结束回访");

    PlatformServiceEnum(String platformCode, String serviceCode, String desc) {
        this.platformCode = platformCode;
        this.serviceCode = serviceCode;
        this.desc = desc;
    }

    private String platformCode;
    private String serviceCode;
    private String desc;

    public String getPlatformCode() {
        return platformCode;
    }

    public String getServiceCode() {
        return serviceCode;
    }

    public String getDesc() {
        return desc;
    }

    /**
     * 唯一标识字段 与 enum-name的映射关系
     */
    private static TreeMap<String, String> keyValuePairs = new TreeMap<>();

    /**
     * 根据特定字段获取 具体的 枚举实例，其实，code也可以是不同枚举字段的组合，也可以是一个对象，只要求它们的组合是唯一的，能够映射唯一的一个枚举实例即可。
     */
    public static PlatformServiceEnum get(String platformCode, String serviceCode) {
        if (keyValuePairs.size() <= 0) {
            TreeMap<String, String> treeMap = Stream.of(PlatformServiceEnum.values())
                    .collect(Collectors.toMap(
                            (platformServiceEnum) -> String.join("&", platformServiceEnum.getPlatformCode(), platformServiceEnum.getServiceCode()),
                            PlatformServiceEnum::name,
                            (oldValue, newValue) -> newValue,
                            TreeMap::new));
            keyValuePairs.putAll(treeMap);
        }
        return PlatformServiceEnum.valueOf(keyValuePairs.get(String.join("&", platformCode, serviceCode)));
    }
}
